package algutil.partagemusic.appli;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

import org.apache.log4j.Logger;

import algutil.fichier.ActionsFichiers;
import algutil.fichier.ConversionFichier;
import algutil.partagemusic.option.Options;
import algutil.partagemusic.services.PartageMusicServices;

public class ScanRepo {

	private final static Logger log = Logger.getLogger(ScanRepo.class);

	public static void main(String[] args) throws IOException {

		Options.configLog4j();
		log.info("#### SCAN REPO PROCESS ########################");

		File scanRepoFile = Options.getInstance().getMyScanRepoFile();

		if (!scanRepoFile.exists()
				|| (scanRepoFile.exists() && !scanRepoFile.isFile())) {
			log.info("Pas de fichier de demande '" + scanRepoFile.getPath()
					+ "'");
			System.exit(0);
		}

		List<File> repos = Options.getInstance()
				.getAllAvailableRepoDirectories();

		PartageMusicServices pms = new PartageMusicServices();

		for (int i = 0; i < repos.size(); i++) {
			log.info("Scan du repo '" + repos.get(i).getPath() + "'");
			List<String> filesScannedForCurrentRepo = pms
					.scanRepo(repos.get(i));
			log.info(" " + filesScannedForCurrentRepo.size()
					+ " fichiers trouves");
			log.debug(" Tri de la liste");
			Collections.sort(filesScannedForCurrentRepo);

			File scan = new File(Options.getInstance().getMyAskDirectory()
					.getPath()
					+ File.separator
					+ "scanRepo_"
					+ Options.getInstance().whoAmI()
					+ "_"
					+ System.currentTimeMillis() + "_" + repos.get(i).getName());
			log.info(" Creation du fichier scanRepo '" + scan.getPath() + "'");
			ActionsFichiers.creerFichierTexteUTF8(scan, filesScannedForCurrentRepo);

			File scanZip = new File(scan.getPath() + ".zip");
			log.info(" Zip du fichier scanRepo en '" + scanZip.getPath() + "'");
			ConversionFichier.zipper(scan, scanZip);

			log.debug(" Suppression du fichier scanRepo '" + scan.getName()
					+ "'");
			scan.delete();
		}

		// Suppression du fichier de demande
		log.debug(" Suppression du fichier de demande  '"
				+ scanRepoFile.getPath() + "'");
		scanRepoFile.delete();
	}
}
